D 旧の種類 = ホラムズ「 TrueColor, 1670 万色だ」 トは 256 色。 24 ビットは , ええと , ええと」 ■ワタソン「 1 ビットというのはモノクロだね , 白と黒だけの。 4 ビットは 16 色で 8 ビッ マホラムズ「では , 話を戻そう。 24 ビットについては正しく理解しているようだが , ほ なかったなあ」 臨ワタソン「うーん , ただの BMP ファイルから , いきなりそんな話に発展するとは思わ してからだね」 マホラムズ「でも , それを実行するとメモリを余計に食うから , やるならメモリを増設 ■ワタソン「そういう楽しみ方もあったのか」 ▽ホラムズ「もう , 写真に近いクオリティの画像を壁紙にできてしまうね」 んなこともできるんだ」 ワタソン「あ , そうか。 1670 万色サポートのディスプレイカードを使っていれば , そ ると便利かもしれないし , だいいち BMP ファイルなら壁紙になるじゃない いからね。でも , データ形式をコンバートするとき , 一時的にこの形式にす マホラムズ「まあ , 圧縮もしてない BMP ファイルで 24 ビットの画像なんて普通は使わな ■ワタソン「僕は , 1670 万色の BMP ファイルなんて見たことがないから」 マホラムズ「そうだよ。知らなかった ? 」 ■ワタソン「え ? そうなの ? そんな色数まで BMP ファイルになっちゃうわけ ? 」 かは誤解があるようだね」 v ホラムズ「 1 ビットを , 白と黒といったよね」 ■ワタソン「ああ。モノクロじゃないのかい ? 」 ホラムズ「 1 ビットの DIB は 2 色を扱えるけど , かまわないんだ」 ■ワタソン「え ? 」 これは白と黒に限らない。赤と青でも ■ワタソン「なんでそんなことができるんだい ? 1 ビットといえばモノクロディスプレ イなんかで使う形式なんじゃないのかい ? 」 マホラムズ「いや。 1 ビットの DIB は , 単に 1 ピクセルを格納するのに 1 ビット使うとい うだけさ。それ以上の意味はないよ。それに , 4 ビットの DIB も同様に好き な 1 6 色の組み合わせで作れる。決してシステムの固定パレットの 16 色にな ってしまうわけじゃない」 ワタソン「つてことは , 1 ビットの BMP ファイルでもモノクロモニタで再現できなか ったり , 4 ビットの BMP ファイルでも 16 色のシステムで再現できないことが あるっていうのかい ? 」 マホラムズ「そのとおり。例えばパソコン通信なんかでよく使われる , MAG フォーマッ
り 第 7 章 BM P ファイルと D 旧 すためのものだからね。必要なのは残りの情報というわけだ」 ■ワタソン「すると , メモリ上でどういう形式で扱うかもこの構造体を調べればわかる ってわけなんだね ? 」 ▽ホラムズ「そうだ」 BII PFIL 日を R 構造体 ー BI 靆 INFI) ADER 構造体 U 胆構造体の配列 ( 必要なら ) BY 旺の配列 図 1 BM P ファイルの構造 OD 旧の ■ワタソン「よし。これで完璧だ。帰ってさっそくプログラムを作ってみよう」 マホラムズ「ところで , 君は気軽に BMP ファイルとーロでいっているけれど , 単純に 1 種類だけだと思っているのかな ? 」 ーワタソン「ああ , OS / 2 形式のちょっと違うファイルがあるって聞いたことがあるよ」 マホラムズ「いや , それのことじゃなくて , 我々が普段使っている Windows の BMP フ ァイルのことさ」 ■ワタソン「 1 種類じゃないのかい ? 」 マホラムズ「ファイルのフォーマットを思い返してみたまえ。 TRGBQUAD 構造体の配 列 ( 必要なら ) 』といっただろう ? この配列が必要なときとそうでないと きがあるんだ。それに , 配列といってもどれくらいのサイズを確保すればい いんだろうね」 ■ワタソン「むむむ。それはよくわからないぞ」 マホラムズ「それに , TBYTE の配列』とあっさりいったけど , いったいどういう形式で 入っているんだろうね。さすがに , これについての説明は BYTE の説明を引 いても出てないよ」 ■ワタソン「ホラムズの意地悪。なにか問題があるなら教えてくれよ」 マホラムズ「よし。 DIB の形式には , いくつかの種類があるんだ。それによってデータ の格納のしかたががらっと変わってしまう」 ■ワタソン「種類というと ? 」 ホラムズ「 1 ビット , 4 ビット , 8 ビット , 24 ビットの 4 種類だ。それぞれ , ひとつのド ット ( ピクセル ) を表現するために何ビットの情報をもっているかで区別され
BMP ファイルのフォーマット 0 : マホラムズ こに VC + + の入ったノートパソコンがあるじゃないか。これに入ってい る , 英語版 Win3.1 の SDK リファレンスのヘルプファイルだけで , 全部教え てあげよう」 ■ワタソン「えーっ ! ? ほんとかなあ」 OBMP ファイルのフォーマット ■ワタソン「じゃあ , BMP ファイルのフォーマットが , そのヘルプファイルからわかる っていうのかい ? 」 マホラムズ「目次から Overviews を選んで , Fi1eFormats を選ぶ。そしてその中から Graphics File Formats を選んでごらん」 ( 注 : 日本語版のヘルプの場合 , 「概要』の下の「ファイル形式』の下の「グラフィックファイ ル形式」にあたります ) ■ワタソン「ふむふむ」 マホラムズ「すると , ほら , 出てくるだろう ? 」 ■ワタソン「あれあれ。英語はよくわからないけどファイルフォーマットの説明は , ほ んの数行じゃないか。残りはファイルストラクチャとかいう説明になってい るよ。ああ , やつばりダメじゃないか。 SDK のマニュアルにも , これくらい しか書いてなかったぞ」 マホラムズ「では説明しよう。 BMP ファイルの具体的な内容については , こでは説明 されていない」 ■ワタソン「それじゃあ , いったいどこで説明してるんだい ? 」 「構造体のところさ」 ホラムズ ■ワタソン「え ? 」 ・「そもそも BMP ファイルのデータ構造というのは , 構造体の形で定義されて マホラムス いるんだ。そうすると , プログラムの中で利用するのも楽だからね。 みんな引っかかるのかもしれないね」 ■ワタソン「なんてこった。全然別の場所を探していたぞ」 マホラムズ「 BMP ファイルのおおざっぱな構造は , こんなふうになっているんだ ( 図 1) 。 だから , これらの構造体の説明を参照すれば , 自然に BMP ファイルのフォ ーマットが理解できるという仕組みだ」 ■ワタソン「なるほど ! そうだったのか。マイクロソフトも人が悪いなあ」 ▽ホラムズ「これをメモリ上に読み込んで利用するときには , BITMAPFILEHEADER 構 造体の情報は必要ない。ファイルの中にどういう情報を入れたか , それを示